using System;
using System.Data;
using System.Collections;
using LibreriaBusiness;
using LibreriaCommon;
using LibreriaData;
using SistemaControlTraficoLibDS;
using SistemaControlTraficoLibData;

namespace SistemaControlTraficoLibBusiness
{
    public class boReserva : boReservaBase, IDisposable
    {
        public boReserva(SecurityInfo securityInfo) : base(securityInfo)
        {
        }

        public DataSet FindByFiltros(string ClienteRazonSocial, int TipoMovilID, Nullable<DateTime> FechaDesde, Nullable<DateTime> FechaHasta, bool SoloProximasASalir, Constants.EstadosEnum estado)
        {
            try
            {
                if (estado == Constants.EstadosEnum.Todos)
                {
                    return Reserva.FindByFiltros(ClienteRazonSocial, TipoMovilID, FechaDesde, FechaHasta, SoloProximasASalir, System.DBNull.Value);
                }
                else
                {
                    return Reserva.FindByFiltros(ClienteRazonSocial, TipoMovilID, FechaDesde, FechaHasta, SoloProximasASalir, estado);
                }
            }
            catch (daException ex)
            {
                throw new boException(ex);
            }
        }
        public DataSet FindByDay()
        {
            try
            {
                
                    return Reserva.FindByDay();
               
            }
            catch (daException ex)
            {
                throw new boException(ex);
            }
        }
        public void Update(dsReserva ds, string ClienteRazonSocial, string ClienteTelefono, int CalleID)
        {
            dsCliente clienteDS = null;
            
            using (boCliente cliente = new boCliente(securityInfo))
            {
                clienteDS = cliente.FindByRazonSocial(ClienteRazonSocial);

                if (clienteDS.Cliente.Rows.Count != 0)
                    clienteDS.Cliente[0].ClienteTelefono = (ClienteTelefono.Trim() != "" ? ClienteTelefono : clienteDS.Cliente[0].ClienteTelefono);
                else
                {
                    dsCliente.ClienteRow drCliente = clienteDS.Cliente.NewClienteRow();
                    drCliente.ClienteRazonSocial = ClienteRazonSocial;
                    drCliente.ClienteTelefono = ClienteTelefono;
                    drCliente.CalleID = CalleID;
                    drCliente.ClienteCalleNumero = "";
                    drCliente.ClientePiso = "";
                    drCliente.ClienteDepartamento = "";
                    drCliente.ClienteContacto = "";
                    drCliente.Activo = true;
                    base.FillLog(drCliente);

                    clienteDS.Cliente.AddClienteRow(drCliente);
                }

                cliente.Update(clienteDS);
                ds.Reserva[0].ClienteID = clienteDS.Cliente[0].ClienteID;
            }

            base.Update(ds);
        }

        public void Desactivar(int reservaID)
        {
            try
            {
                Reserva.Desactivar(reservaID);
            }
            catch (daException ex)
            {
                throw new boException(ex);
            }
        }

        public int FindProximosASalir()
        {
            try
            {
                return Reserva.FindProximosASalir();
            }
            catch (daException ex)
            {
                throw new boException(ex);
            }
        }

    }
}

